package com.example.CloudWeather.ui.login

import android.content.Intent
import android.os.Bundle
import com.example.CloudWeather.base.BaseBindingActivity
import com.example.CloudWeather.databinding.AcLoginBinding
import android.widget.Toast
import android.view.LayoutInflater
import com.example.CloudWeather.bean.LoginRequest
import androidx.lifecycle.lifecycleScope
import com.example.CloudWeather.MainActivity
import com.example.CloudWeather.storage.TokenPreferences
import com.example.CloudWeather.util.RetrofitClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class LoginActivity : BaseBindingActivity<AcLoginBinding>() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 登录按钮绑定点击事件，点了抽后 弹框提示 Toast
        binding.tvLogin.setOnClickListener {
            // Toast弹框提示
            Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show()
            doLogin()
        }

    }

    fun doLogin() {
        // 获取输入的账号 和 密码
        val username = binding.etUsername.text.toString()
        val password = binding.etPassword.text.toString()
        // 判断账号 和 密码是否为空。空提示用户，阻断代码，不为空，调用接口
        if (username.isEmpty() || password.isEmpty()) {
            Toast.makeText(this, "请输入账号和密码", Toast.LENGTH_SHORT).show()
            return
        }
        // 创建 登录的数据格式
        val loginRequest = LoginRequest(username, password)
        // 3. 登录逻辑
        try {
            // 使用协程发起网络请求，避免阻塞主线程
            lifecycleScope.launch {
                // 创建登录请求对象，传入用户名和密码
                val req = LoginRequest(username, password)
                // 在IO线程中执行网络请求（网络请求属于耗时操作，不能在主线程执行）
                val res = withContext(Dispatchers.IO) {
                    RetrofitClient.apiService.login(req)
                }

                // 检查服务器返回的响应码是否为10000（表示登录成功）
                if (res.code == 10000) {
                    // 从响应数据中获取token（用于后续接口的身份验证）
                    val token = res.data?.token
                    // TODO: 持久化存储token（比如保存到SharedPreferences或数据库中）

                    // 显示登录成功的提示信息
//                    Toast.makeText(this@LoginActivity, token, Toast.LENGTH_SHORT).show()
                    // 使用 TokenPreferences的单例方法获取并 保存登录之后的token
                    TokenPreferences.getInstance(this@LoginActivity).saveToken(token.toString())
                    // 登录成功后跳转到主页面，并关闭当前登录页面
                    startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                    finish()
                } else {
                    // 如果响应码不是10000，说明登录失败，提示用户
                    Toast.makeText(
                        this@LoginActivity,
                        "登录失败",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

        } catch (e: Exception) {
            Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show()
        }

    }

    // 将
    override fun initBinding(layoutInflater: LayoutInflater): AcLoginBinding {
        return AcLoginBinding.inflate(layoutInflater)
    }
}